{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "caffe_root = '/home/csunix/schtmt/NewFolder/caffe_Sep/'\n",
    "#print sys.path\n",
    "sys.path.insert(0,caffe_root + 'python')\n",
    "import caffe\n",
    "import h5py\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "\n",
    "def visualize_weights(net, layer_name, padding=4, filename=''):\n",
    "    # The parameters are a list of [weights, biases]\n",
    "    data = np.copy(net.params[layer_name][0].data)\n",
    "    # N is the total number of convolutions\n",
    "    N = data.shape[0] * data.shape[1]\n",
    "    print N\n",
    "    print data.shape\n",
    "    # Ensure the resulting image is square\n",
    "    filters_per_row = int(np.ceil(np.sqrt(N)))\n",
    "    # Assume the filters are square\n",
    "    filter_size = data.shape[2]\n",
    "    # Size of the result image including padding\n",
    "    result_size = filters_per_row * (filter_size + padding) - padding\n",
    "    # Initialize result image to all zeros\n",
    "    result = np.zeros((result_size, result_size))\n",
    "\n",
    "    # Tile the filters into the result image\n",
    "    filter_x = 0\n",
    "    filter_y = 0\n",
    "    for n in range(data.shape[0]):\n",
    "        for c in range(data.shape[1]):\n",
    "            if filter_x == filters_per_row:\n",
    "                filter_y += 1\n",
    "                filter_x = 0\n",
    "            for i in range(filter_size):\n",
    "                for j in range(filter_size):\n",
    "                    result[filter_y * (filter_size + padding) + i, filter_x * (filter_size + padding) + j] = data[\n",
    "                        n, c, i, j]\n",
    "            filter_x += 1\n",
    "    print result.shape\n",
    "    # Normalize image to 0-1\n",
    "    min = result.min()\n",
    "    max = result.max()\n",
    "    result = (result - min) / (max - min)\n",
    "\n",
    "    # Plot figure\n",
    "    plt.figure(figsize=(10, 10))\n",
    "    plt.axis('off')\n",
    "    plt.imshow(result, cmap='gray', interpolation='nearest')\n",
    "\n",
    "    # Save plot if filename is set\n",
    "    if filename != '':\n",
    "        plt.savefig(filename, bbox_inches='tight', pad_inches=0)\n",
    "\n",
    "    plt.show()\n",
    "\n",
    "def H_visualize_weights(net, layer_name, padding=4, filename=''):\n",
    "    # follow the method of \"display_network.m\"\n",
    "    # The parameters are a list of [weights, biases]\n",
    "    data = np.copy(net.params[layer_name][0].data)\n",
    "    # N is the total number of convolutions\n",
    "    N = data.shape[0] * data.shape[1]\n",
    "    print N\n",
    "    print data.shape\n",
    "    # a = data[1,0,:,:]\n",
    "    # print abs(a).min()\n",
    "    # Ensure the resulting image is square\n",
    "    filters_per_row = int(np.ceil(np.sqrt(N)))\n",
    "    # Assume the filters are square\n",
    "    filter_size = data.shape[2]\n",
    "    # Size of the result image including padding\n",
    "    result_size = filters_per_row * (filter_size + padding) - padding\n",
    "    # Initialize result image to all zeros\n",
    "    result = np.ones((result_size, result_size))\n",
    "\n",
    "    # Tile the filters into the result image\n",
    "    filter_x = 0\n",
    "    filter_y = 0\n",
    "    for n in range(data.shape[0]):\n",
    "        for c in range(data.shape[1]):\n",
    "            if filter_x == filters_per_row:\n",
    "                filter_y += 1\n",
    "                filter_x = 0\n",
    "            # for i in range(filter_size):\n",
    "            #     for j in range(filter_size):\n",
    "            #         result[filter_y * (filter_size + padding) + i, filter_x * (filter_size + padding) + j] = data[\n",
    "            #             n, c, i, j]\n",
    "            result_temp = data[n,c,:,:]\n",
    "            clim = abs(result_temp).max()\n",
    "            result[filter_y * (filter_size + padding):filter_y * (filter_size + padding) + filter_size,\n",
    "            filter_x * (filter_size + padding):filter_x * (filter_size + padding) + filter_size] = data[n,c,:,:]/clim\n",
    "            filter_x += 1\n",
    "    print result.shape\n",
    "    # # Normalize image to 0-1\n",
    "    # min = result.min()\n",
    "    # max = result.max()\n",
    "    # result = (result - min) / (max - min)\n",
    "\n",
    "    # Plot figure\n",
    "    plt.figure(figsize=(10, 10))\n",
    "    plt.axis('off')\n",
    "    plt.imshow(result, cmap='gray', interpolation='nearest')\n",
    "\n",
    "    # Save plot if filename is set\n",
    "    if filename != '':\n",
    "        plt.savefig(filename, bbox_inches='tight', pad_inches=0)\n",
    "\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "caffe.set_mode_cpu()\n",
    "# model_def = caffe_root + 'examples/mnist_wta_autoencoder/mnist_wta_test.prototxt'\n",
    "#model_weights = caffe_root + 'examples/mnist_wta_autoencoder/mnist_GlobalWta_iter_60000.caffemodel'\n",
    "# model_weights = '/usr/not-backed-up/1_convlstm/mnist_wta_sep2017_Ver1/mnist_GlobalWta_iter_60000.caffemodel'\n",
    "# model_weights = '/usr/not-backed-up/1_convlstm/mnist_wta_cross_entropy_loss_sep2017/mnist_GlobalWta_iter_60000.caffemodel'\n",
    "model_def = caffe_root + 'examples/mnist_wta_autoencoder/mnist_wta_leakyReLU_test.prototxt'\n",
    "model_weights = '/usr/not-backed-up/1_convlstm/mnist_wta_leakyReLU_sep2017/mnist_GlobalWta_iter_99600.caffemodel'\n",
    "# Load model\n",
    "net = caffe.Net( model_def,model_weights, caffe.TEST)\n",
    "data = np.copy(net.params['deconv'][0].data)\n",
    "\n",
    "##################################################################\n",
    "# create hdf5 file to check in Matlab\n",
    "# h5f = h5py.File('deconvWeight.h5','w') # w means write\n",
    "# h5f.create_dataset('weight',data = data)\n",
    "# h5f.close()\n",
    "#########"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "64\n",
      "(64, 1, 11, 11)\n",
      "(116, 116)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAJCCAYAAADQsoPKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3WmQHdV9//+jfdeMRqN9QxJiESAsYxMWb5hQZVzwxA4h\njispFySViishmMLGptAKwWCn4qJiJ9hVjuMsLi8kIXEc22QxwQkQNrEFIWtD+2g0mpFmRvv2e/J/\n8O/v96Nzv+7pvrrY79ezPnXunV5O9z1z76e/PezMmTMJAAAA2vBzvQIAAACtjMkSAABABpMlAACA\nDCZLAAAAGUyWAAAAMpgsAQAAZDBZAgAAyGCyBAAAkMFkCQAAIGPkuV6BlFJas2ZNbWXEVYXyESNG\nuLbzzz/fte3Zs6ewfOzYsdD733vvvT/PKp7Vfffd59qGDRvW8HWqj2o7ffp0YTlazV3tv+HDi/Nu\n9fdWrlwZev+IO++8s7B89OhR1+f48eOu7dSpU4VltZ52W1LS22z3l/p7HR0drm3cuHGF5c9//vOu\nT1krVqxwbXY97XEfCrVfIuNP7eM6x8zq1atdmxrvtu3kyZOuT9k29ffUNo8cWbwsjx071vV58MEH\nXVtZdvzZv382dvtOnDjRsE9K5cdf5LqzatWqUu+trF27tmEfNY5Vm9rmw4cPN3z/yZMnuzZ7fNTf\nU59Vn/vc5xr+vYg1a9ZU8j5DEfkcTMmfc2e5xoTejG+WAAAAMpgsAQAAZDBZAgAAyGCyBAAAkNES\nAe9oWMuKBDRVHxvyPVu/UaNGFZYjgeEqRULFqk31iYQqVZ9oWLHsMSzLBroPHDjg+qi2wcHBwrIK\npartiwSZVR8VcFWh7zpFjn3kPIncJJCSHjOWChHXOYai1wF7vNSNA0eOHHFtKlCr2qzRo0e7tgkT\nJhSWo4HrqqhxrNbTrtfAwIDr09/f79rUddQen8gYOhci6xUZVyml1NfXV1hWx3nKlCmubebMmYVl\nNUbte9ctenNQVe9/LsZHa45IAACAFsFkCQAAIIPJEgAAQEZLZJaUSH4h8jup6qNyKuPHj3dtkUKL\nNgNTpWjhPvsbucpKqN/MI9unMinqt/VI8a8q2fVS26wyFN3d3YVllWtS76VyCHY/2CxBSjpz0NbW\n5tqqEsmrqcyIGh+2nzqmKt+i2LGmMjCqrSpqm9VxtoUCVeZG5UHUdcDuU7V9anxY0X1clh3b0UK+\nEydOLCxPmzbN9dmwYYNr6+rqavj+dY6FqDFjxrg2e86rzxLVpnJF+/btKyzPmzfP9bn22msbvtfe\nvXtdnzo/l8qK5poiudxo4eWy66DwzRIAAEAGkyUAAIAMJksAAAAZTJYAAAAyWiLgHQldRcPOkT7q\n76mnO9vXqj4qzFeVSCG4lPz2qDCyCqraoKD6eyrkGGmrO+Bt1zUSxlRU8Fc9DVztU/s0+FYopKcC\n+fY4q6KKKgxvA8rRcKTa73Zf2XBwSvUGmVXAVoVgbeDf3hCQkg7UHjx40LXZ8aCuH2rM2LFti1TW\nTY2hSPHdzs5O17Z48WLX9vWvf921bdu2rbA8ffp010eNjzrPuXHjxrk2eyOQun6ocbVx40bX9vzz\nzxeWb7/9dtfniiuucG1bt24tLKvr1f79+11bs0WuF9GxVvZmpCqd+6s7AABAC2OyBAAAkMFkCQAA\nIIPJEgAAQEZLBLxVJV0bclRBPtVmQ14qCKaqFc+fP9+12UqzKsytAqBVUQFDFYxtb28vLKtq5Crg\numXLlsLym2++6fqoYHhHR4drs8ei7rCz3Ua1TpFKxDZ4nJIOTKrwoA3szpgxw/VR66X+ZlVUeNtu\nj6pArQLK9r3UeaNCtyqQbKuWjxo1yvWJBPLLUteYQ4cOuTYbjFXVpnfv3u3a1Jix+0Gdl+r6ZPeD\nel2dokFZe36psLMKfa9du9a1/eZv/mZhWVXWV+dNnZW+1d+zwXM1jtXNEuvWrXNt9hp53XXXuT7q\nxhVb9V2dg0OpVF0Vuw6Rm09S0ueE3c/qszhS1XsoNx7xzRIAAEAGkyUAAIAMJksAAAAZLZFZijyl\nWT2du+xvlKrolcos2d+eVRYjUqytrN7eXtemsiV2X6lCZu9+97tdm/2t+/XXX3d9nnzySdemCqzV\nuR8UmydQv9ur3/ttvmv27Nmuj8peqAyWzZKojIPKmNWZ51LrYPM6Kiegcjh2/EUzS6qgYCTTVud+\nUeNT7QebPVL5k2imzeZpVPZIjVGbhbN5r6pFzl21zZbaFnUNU9m+L33pS4XlP/qjP3J9pk6d6trq\nLn5r2RzpnDlzXJ9Zs2a5NpVHstdy9TmoxpXNHKp8V53XY5WHUm32eqEygur4RTKdKt8YGQtDyXLx\nzRIAAEAGkyUAAIAMJksAAAAZTJYAAAAyWiLgvWTJEte2Z8+ewrIKb6mCZDbYpkJzinovWwhL9amz\n+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\nLCgsq+vCf/3Xf7m2+fPn+5U16jyX1DhWn+E24K36qPdaunSpa/vIRz5SWN6/f7/rE7lJK/IEjLPh\nmyUAAIAMJksAAAAZTJYAAAAyWiKzFHlCvXqSsyoSaTMGF154oevzta99zbWp30Dt7+hKnb8Nq2yJ\nKsxmc1oqO6N+24889Vrld1QmxWYMVFG5KtnfntUYihQ7Veupxtpdd93l2uyx37Ztm+uze/du16Zy\nKlVReRCbsVE5nIULF7o2+2Rv9d5r1qxxbSqPZPM7zS7yqf7eeeed59rseaIKDKrzMlJcUuXe1Ho1\nm81EqeOgzgm77jajkpI+B9X1yV7Xdu3a5fosW7bMtUU+O6pkt0dlbtT5pcaaPeduueUW10edS7ZN\njaE6x5Xa52o/2M8O1Wf27Nmu7cEHH3RtNnuktk99LtkxOZT837k/UwEAAFoYkyUAAIAMJksAAAAZ\nTJYAAAAyWiLgrUJsNgypAoaq4KQNZatCen/913/t2lTA1f7NVnjyvArXDQ4OFpZViE0F2P/t3/6t\nsPzSSy+5PiqgrIKqNrQ5ZcoU16dKdj9EiqKl5AuXqadlP/HEE66tp6fHtT3//POF5b1797o+9tik\nVG+RQXUu2cKA6rxRheDs2FYhd3UDgHp6ulqvZlKhbBXEtQU8VcBbjX8VXo0c50ih21YoSqmufTbs\nrM43FeZWNwrY94qGzJtdfNGOd/X3Fy1a5NrUzUL25pJnnnnG9bGFYVOKfTbWeb5FbmZIyV+T586d\n6/r8+Z//uWtTn3G2AOqbb77p+qiilEMpQmnxzRIAAEAGkyUAAIAMJksAAAAZTJYAAAAy3jYBb/X0\nahUktYHuTZs2uT6qgrKqcG3XQa1nnZVSDxw44NpU4Hrfvn2FZVX9VoWPbagyWq3YhmBT8vum7uB7\npIK3ClfbffrlL3+54XunpMeRbVPHS61XlaFDS4WB7XF+6623XB8VLrUVyVWwWZ2DKnAaUeeYUWFu\nGxpNSW+jpY6pCjeXfeq6Xa86x0tK/hqm/p6qxG37qeNuK7ef7f3tNUwFwyPXnSpFqoOrmyVUVWp1\nHV29enVhWT1BwVbfT8lfp9U+rvNzKRLmTslXLb/33ntdH3XNVO9lA90vvPCC66POZ2so1xi+WQIA\nAMhgsgQAAJDBZAkAACCDyRIAAEBGywa8bZsK0qnQ5vz58wvLN910k+szb94816YC3rbSrAp/1hmk\n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\nAMj4f8RMgLbkzfszAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2570ce8a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize_weights(net, 'conv1', filename='conv1.png')\n",
    "#visualize_weights(net, 'deconv', filename='deconv.png')\n",
    "H_visualize_weights(net, 'deconv', filename='deconv_MatlabDisplay.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
